#define _GNU_SOURCE //一般在Makefile里加 -D_GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUFFSIZE (1024)

void usage(void) { printf("Usage:...\n"); }

int main(int argc, char **argv) {
    if(argc != 2){ fprintf(stderr, "argc != 2\n"); usage(); exit(1); }

    FILE *fps = fopen(argv[1], "r");
    if(fps == NULL){ perror("fopen()"); exit(1); }

    size_t linesize = 0; //这两个遍历必须初始化为0(NULL)，getline()才知道你是第一次调用
    char *linebuff = NULL; //没初始化，非0(NULL)时，它内部就用realloc，出bug了。第一次应该用malloc
    while(1){
        // getline使用malloc()和realloc()实现，返回动态空间
        if(getline(&linebuff, &linesize, fps) < 0){
            break;
        }
        printf("linesize[%ld],datalen[%ld]:%s", linesize, strlen(linebuff), linebuff);
    }

    // 看getline()源码是用malloc申请内存的，所以可以free(linebuff);
    fclose(fps);
    exit(0);
}
